package com.hanthink.quartz.util;

import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.Notification;
import java.util.HashMap;

public class JiGuangPushUtil {
    /**
     * Android推送
     * 备注：推送方式不为空时，推送的值也不能为空；推送方式为空时，推送值不做要求
     *
     * @param type         推送方式：tag:标签推送 alias:别名推送
     * @param userId       推送的标签或别名值
     * @param message      推送的内容
     * @param appKey       appKey
     * @param masterSecret masterSecret
     */
    public static void pushAllAndroid(String type, String userId[], String message,String title, String appKey, String masterSecret) {
        //两个参数分别填写你申请的masterSecret和appKey
        JPushClient jPushClient = new JPushClient(masterSecret, appKey);
        PushPayload.Builder builder = PushPayload.newBuilder();
        builder.setPlatform(Platform.android());//设置接受的平台，all为所有平台，包括安卓、ios、和微软的
        //设置如果用户不在线、离线消息保存的时间
        Options options = Options.sendno();
        options.setTimeToLive(86400L);    //设置为86400为保存一天，如果不设置默认也是保存一天
        builder.setOptions(options);
        //设置推送方式
        if ("alias".equals(type)) {
            builder.setAudience(Audience.alias(userId));//根据别名推送
        } else if ("tag".equals(type)) {
            builder.setAudience(Audience.tag(userId));//根据标签推送
        } else {
            builder.setAudience(Audience.all());//Audience设置为all，说明采用广播方式推送，所有用户都可以接收到
        }
        //设置为采用通知的方式发送消息
//        builder.setNotification(Notification.alert(alert));
        builder.setNotification(Notification.android(message, title, new HashMap<>()));
        PushPayload pushPayload = builder.build();
        try {
            //进行推送，实际推送就在这一步
            PushResult pushResult = jPushClient.sendPush(pushPayload);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * IOS推送开发
     * 备注：推送方式不为空时，推送的值也不能为空；推送方式为空时，推送值不做要求
     *
     * @param type         推送方式：tag:标签推送 alias:别名推送
     * @param userId       推送的标签或别名值
     * @param message      推送的内容
     * @param appKey       appKey
     * @param masterSecret masterSecret
     */
    public static void pushAllIOSDev(String type, String[] userId, String message, String appKey, String masterSecret) {
        //两个参数分别填写你申请的masterSecret和appKey
        JPushClient jPushClient = new JPushClient(masterSecret, appKey);
        PushPayload.Builder builder = PushPayload.newBuilder();
        builder.setPlatform(Platform.ios());//设置接受的平台，all为所有平台，包括安卓、ios、和微软的
        //设置如果用户不在线、离线消息保存的时间
        Options options = Options.sendno();
        options.setTimeToLive(86400l);    //设置为86400为保存一天，如果不设置默认也是保存一天
        options.setApnsProduction(false);
        builder.setOptions(options);
        //设置推送方式
        if ("alias".equals(type)) {
            builder.setAudience(Audience.alias(userId));//根据别名推送
        } else if ("tag".equals(type)) {
            builder.setAudience(Audience.tag(userId));//根据标签推送
        } else {
            builder.setAudience(Audience.all());//Audience设置为all，说明采用广播方式推送，所有用户都可以接收到
        }
        //设置为采用通知的方式发送消息
        builder.setNotification(Notification.alert(message));
        PushPayload pushPayload = builder.build();
        try {
            //进行推送，实际推送就在这一步
            PushResult pushResult = jPushClient.sendPush(pushPayload);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * IOS推送生产
     * 备注：推送方式不为空时，推送的值也不能为空；推送方式为空时，推送值不做要求
     *
     * @param type         推送方式：tag:标签推送 alias:别名推送
     * @param userId       推送的标签或别名值
     * @param message      推送的内容
     * @param appKey       appKey
     * @param masterSecret masterSecret
     */
    public static void pushAllIOSDis(String type, String[] userId, String message, String appKey, String masterSecret) {
        //两个参数分别填写你申请的masterSecret和appKey
        JPushClient jPushClient = new JPushClient(masterSecret, appKey);
        PushPayload.Builder builder = PushPayload.newBuilder();
        builder.setPlatform(Platform.ios());//设置接受的平台，all为所有平台，包括安卓、ios、和微软的
        //设置如果用户不在线、离线消息保存的时间
        Options options = Options.sendno();
        options.setTimeToLive(86400l);    //设置为86400为保存一天，如果不设置默认也是保存一天
        options.setApnsProduction(true);
        builder.setOptions(options);
        //设置推送方式
        if ("alias".equals(type)) {
            builder.setAudience(Audience.alias(userId));//根据别名推送
        } else if ("tag".equals(type)) {
            builder.setAudience(Audience.tag(userId));//根据标签推送
        } else {
            builder.setAudience(Audience.all());//Audience设置为all，说明采用广播方式推送，所有用户都可以接收到
        }
        //设置为采用通知的方式发送消息
        builder.setNotification(Notification.alert(message));
        PushPayload pushPayload = builder.build();
        try {
            //进行推送，实际推送就在这一步
            PushResult pushResult = jPushClient.sendPush(pushPayload);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 全部推送
     * 备注：推送方式不为空时，推送的值也不能为空；推送方式为空时，推送值不做要求
     *
     * @param type         推送方式：tag:标签推送 alias:别名推送
     * @param userId       推送的标签或别名值
     * @param message      推送的内容
     * @param appKey       appKey
     * @param masterSecret masterSecret
     */
    public static void pushAll(String type, String[] userId, String message, String title, String appKey, String masterSecret) {
        //两个参数分别填写你申请的masterSecret和appKey
        JPushClient jPushClient = new JPushClient(masterSecret, appKey);
        PushPayload.Builder builder = PushPayload.newBuilder();
        builder.setPlatform(Platform.all());//设置接受的平台，all为所有平台，包括安卓、ios、和微软的
        //设置如果用户不在线、离线消息保存的时间
        Options options = Options.sendno();
        options.setTimeToLive(86400l);    //设置为86400为保存一天，如果不设置默认也是保存一天
        builder.setOptions(options);
        //设置推送方式
        if ("alias".equals(type)) {
            builder.setAudience(Audience.alias(userId));//根据别名推送
        } else if ("tag".equals(type)) {
            builder.setAudience(Audience.tag(userId));//根据标签推送
        } else {
            builder.setAudience(Audience.all());//Audience设置为all，说明采用广播方式推送，所有用户都可以接收到
        }
        //设置为采用通知的方式发送消息
        builder.setNotification(Notification.alert(message));
        builder.setNotification(Notification.android(message, title, new HashMap<>()));
        PushPayload pushPayload = builder.build();
        try {
            //进行推送，实际推送就在这一步
            PushResult pushResult = jPushClient.sendPush(pushPayload);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //测试类
    public static void main(String[] args) {
        String[] str = {"PROdati-9197-user"};
        pushAllAndroid("alias", str, "你有新的任务，请及时处理呀", "提醒","appKey", "masterSecret");
    }
}
